package com.shujia.letter;

/*
让存钱和取钱交替执行
 */
public class Account {
    private String no;

    private int balance;

    private int money;

    // true 表示有钱, false 表示账号没钱
    private boolean flag = false;


    // 存钱
    public synchronized void depsit(int money) {
        /*
        考虑账户是否有钱, 如果账号没钱的话可以存钱
        账号有钱, 等待其他线程取钱之后才能存钱
         */
        try {
//            if (flag) {
            while (flag) {
                wait();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 执行存钱的逻辑
        System.out.println(Thread.currentThread().getName() + "存钱:" + money);
        balance += money;

        // 账号有钱了
        flag = true;

        // 存钱之后, 就代表可以取钱了
        // 唤醒等待队列的线程
//        notify();
        notifyAll();

    }

    // 取钱
    public synchronized void draw(int money) {
        try {
            // 没钱的时候, 进入等待队列
//            if (!flag) {// 有问题
            while (!flag) {// 条件判断的时候一定要使用while, 不要用if
                wait();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName() + "取钱:" + money);
        balance -= money;

        // 取钱后, 代表没钱了
        flag = false;


//        notify();
        notifyAll();
    }


}
